# 需求: 使用while循环,快速打印矩形
"""
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
"""

# 第一步: 要输出一行*(使用循环输出)
i = 1
while i <= 5:
    # 当打印结束时,会自动换行,所以无法打印一行数据.
    # 如果想打印一样数据,就要修改结束符,让其无法自动换行
    print('*', end=' ')
    i += 1

print('\n---------------------')

# 第二步: 要输出多行 * (5行)
# 循环打印五次一行数据即可
j = 1
while j <= 5:
    i = 1
    while i <= 5:
        # 当打印结束时,会自动换行,所以无法打印一行数据.
        # 如果想打印一样数据,就要修改结束符,让其无法自动换行
        print('*', end=' ')
        i += 1
    # 由于换行符都进行了替换,所以在此处需要print一个换行符
    print()  # TODO 结束符默认就是\n
    j += 1

# 思考: 当前i 是行数还是列数呢? 列数
# 思考: 当前j 是行数还是列数呢? 行数

# 结论: 外层循环控制行, 内层循环控制列
# 如果需要打印一个4行8列的矩形,我们应该如何修改呢?
j = 1
while j <= 4:
    i = 1
    while i <= 8:
        # 当打印结束时,会自动换行,所以无法打印一行数据.
        # 如果想打印一样数据,就要修改结束符,让其无法自动换行
        print('*', end=' ')
        i += 1
    # 由于换行符都进行了替换,所以在此处需要print一个换行符
    print()  # 结束符默认就是\n
    j += 1

# 练习:
# 使用循环嵌套,打印如下直角三角形
'''
* 
* *  
* * *  
* * * *  
* * * * * 
'''
# 分析1: 第一行打印1个*  第二行打印2个* 以此类推,我们得出结论, * 的个数就是行数
# 分析2: 如果想要打印一列数据, 则让循环变量i从1开始, 使用 i <= 1作为循环条件, 想要打印几列,就让i <= 几即可
# 分析3: 当前数据的行数,就等于j, 如果想让打印与行数相同的列,则使用i <= 行数即可, 也可以说 是 i <= j

j = 1
while j <= 5:
    i = 1
    while i <= j:
        print('*', end=' ')
        i += 1
    print()
    j += 1

'''
* * * * * 
* * * *  
* * *  
* *  
* 
'''

j = 1
while j <= 5:
    i = 1
    while i <= 6 - j:
        print('*', end=' ')
        i += 1
    print()
    j += 1
